데이터 프레임 날짜 인덱스 설정
알파벳 주가 데이터
우리가 다룰 데이터는 'GOOG'라는 이름의 엑셀 파일입니다. 이는 원래 구글의 주식 코드였습니다. 한국에서는 주식을 구별하기 위해 번호를 부여하지만, 미국에서는 알파벳으로 구별하게 됩니다.
우리는 이 엑셀 파일을 판다스에서 읽어야 합니다. 판다스에서 엑셀 파일을 읽기 위해서는 read_excel
함수를 사용하면 됩니다. 이 함수를 이용하면, 엑셀 파일의 내용이 df
라는 데이터프레임에 담기게 됩니다.
import pandas as pd
df = pd.read_excel('GOOG.xlsx')
다음으로 df.head 함수를 사용하면 데이터의 첫 5행을 볼 수 있습니다. 이 데이터에서 각 컬럼의 의미는 다음과 같습니다.
Date
: 날짜Price
: 종가Open
: 시가High
: 최고가Low
: 최저가Vol.
: 거래량Change
: 가격 변화율
df.head()
Date | Price | Open | High | Low | Vol. | Change % | |
---|---|---|---|---|---|---|---|
0 | 2014-03-28 | 558.46 | 559.66 | 564.88 | 557.14 | 41.12K | 0.0027 |
1 | 2014-03-31 | 555.45 | 565.34 | 565.45 | 555.41 | 10.80K | -0.0054 |
2 | 2014-04-01 | 565.61 | 557.18 | 566.89 | 557.18 | 7.95K | 0.0183 |
3 | 2014-04-02 | 565.45 | 598.35 | 603.17 | 560.65 | 147.10K | -0.0003 |
4 | 2014-04-03 | 568.18 | 568.29 | 585.67 | 562.59 | 5.10M | 0.0048 |
파일을 불러왔을 때, 왼쪽에 인덱스를 확인할 수 있습니다. 이 인덱스는 자동으로 번호가 부여되며, 파이썬과 같은 프로그래밍 언어에서는 숫자를 0부터 세는 진행 방식을 사용합니다.
Note
인덱스가 0번부터 시작하는 방식은 여러 가지 장점이 있습니다. 예를 들어, 호텔에서 7호실부터 숙박이 시작 될 때, 사람들에게 0번, 1번, 2번 등으로 번호를 부여하면 계산하기가 훨씬 편리합니다. 0번째 사람이 7호실에 살고, 1번은 8호실에 살게 됩니다. 반면, 1번, 2번, 3번 등으로 부여하면 계산이 복잡해질 수 있습니다. 예를 들면, 7호실에 1번 손님이 있을 경우에는 8번이 되므로 다시 1을 뺄 필요가 있습니다.
인덱스 설정
Date
컬럼을 날짜로 변환해서 다시 Date
컬럼에 덮어 씁니다.
df.Date = pd.to_datetime(df.Date)
Date
컬럼을 df
의 인덱스로 설정합니다. set_index
함수는 기본적으로 원본 데이터는 그대로 두고, 인덱스가 변경된 새로운 데이터를 생성합니다. 여기서처럼 inplace=True
로 설정하면, 원본 데이터의 인덱스를 변경합니다.
df.set_index('Date', inplace=True)
다시 df.head
를 확인해보겠습니다. 앞서는 행 번호가 0, 1, 2, 3, 4로 표시되어 있었지만, 이제는 날짜로 표시되어 있습니다. Date
컬럼은 다른 컬럼과 달리 특별히 처리되어 왼쪽 아래에 표시됩니다. 이는 Date
가 더 이상 컬럼이 아닌, 각 행의 번호 역할을 하는 것입니다.
df.head()
Price | Open | High | Low | Vol. | Change % | |
---|---|---|---|---|---|---|
Date | ||||||
2014-03-28 | 558.46 | 559.66 | 564.88 | 557.14 | 41.12K | 0.0027 |
2014-03-31 | 555.45 | 565.34 | 565.45 | 555.41 | 10.80K | -0.0054 |
2014-04-01 | 565.61 | 557.18 | 566.89 | 557.18 | 7.95K | 0.0183 |
2014-04-02 | 565.45 | 598.35 | 603.17 | 560.65 | 147.10K | -0.0003 |
2014-04-03 | 568.18 | 568.29 | 585.67 | 562.59 | 5.10M | 0.0048 |
원래 상태에서는 2014년 3월 31일에 해당하는 주가를 가리키려면 1번을 통해 가리키야 했지만, 이제는 해당 행을 날짜로 직접 가리킬 수 있게 됩니다.
df.loc['2014-03-31']
Price 555.45 Open 565.34 High 565.45 Low 555.41 Vol. 10.80K Change % -0.0054 Name: 2014-03-31 00:00:00, dtype: object
정렬
여기서 sort_index
함수를 이용하면 인덱스 순으로 정렬할 수 있습니다.
df.sort_index(inplace=True)
인덱스를 내림차순(예: 3, 2, 1 순)으로 정렬하려면 ascending=False
로 설정하면 됩니다.
df.sort_index(ascending=False)
플롯
가격 컬럼에 대한 그래프를 보기 위해 df.Price.plot
함수를 사용해봅시다. 이 때 Price
의 P
는 대문자이므로, 대문자로 입력하셔야 합니다.
이 명령을 사용하면 주가 변동을 그래프로 쉽게 파악할 수 있습니다. 가로축은 인덱스에 있는 날짜 정보를 사용하여 자동으로 표시됩니다.
그래프를 보면 대략 500달러에서 시작하여 최종적으로는 거의 3000달러까지 주가가 올라가는 것을 확인할 수 있습니다.
df.Price.plot()
<Axes: xlabel='Date'>